package br.com.pucrs.tcc.bd;

import java.util.ArrayList;

import org.hibernate.Criteria;
import org.hibernate.SQLQuery;
import org.hibernate.Session;
import org.hibernate.criterion.Restrictions;

import br.com.pucrs.tcc.ed.Aluno;
import br.com.pucrs.tcc.ed.GrupoTrabalho;
import br.com.pucrs.tcc.ed.Professor;

public class AlunoBD {

	private Session mSession;

	public AlunoBD(Session session) {
		mSession = session;
	}

	public void inclui(Aluno aluno) {
		System.out.println("BD.Inclui");
		mSession.saveOrUpdate(aluno);
	}

	public void update(Aluno aluno) {
		mSession.update(aluno);
	}
	
	public void delete(Aluno aluno) {
		mSession.delete(aluno);
	}
	
	public Aluno retrieve(Aluno aluno) {
		Aluno alunoRetorno = null;

		alunoRetorno = (Aluno) mSession.load(Aluno.class, aluno.getMatricula());

		return alunoRetorno;
	}

	public ArrayList<Aluno> listByGrupo(Integer id) {
		ArrayList<Aluno> listaRetorno = null;

		StringBuilder sql = new StringBuilder();

		sql.append("     SELECT aln.*, usu.* ");
		sql.append("       FROM alunos aln ");
		sql.append(" INNER JOIN alunos_grupos_trabalho agt ");
		sql.append("         ON (aln.matricula = agt.alunos_matricula) ");
		sql.append(" INNER JOIN usuarios usu ");
		sql.append("         ON (aln.matricula = usu.matricula) ");
		sql.append("      WHERE agt.grupos_trabalho_id = ? ");
		sql.append("   ORDER BY usu.nome ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.addEntity(Aluno.class);
		query.setInteger(0, id);

		listaRetorno = (ArrayList<Aluno>) query.list();

		return listaRetorno;
	}
	
	
	public ArrayList<Aluno> lista(Aluno aluno) {
		ArrayList<Aluno> listaRetorno = null;

		StringBuilder sql = new StringBuilder();

		sql.append("     SELECT aln.*, usu.* ");
		sql.append("       FROM alunos aln ");
		sql.append(" INNER JOIN usuarios usu ");
		sql.append("         ON (aln.matricula = usu.matricula) ");
		sql.append("   ORDER BY usu.nome ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.addEntity(Aluno.class);

		listaRetorno = (ArrayList<Aluno>) query.list();

		return listaRetorno;
	}
	
	public ArrayList<Aluno> lista(String matricula) {
		ArrayList<Aluno> listaRetorno = null;

		StringBuilder sql = new StringBuilder();

		sql.append("     SELECT aln.*, usu.* ");
		sql.append("       FROM alunos aln ");
		sql.append(" INNER JOIN usuarios usu ");
		sql.append("         ON (aln.matricula = usu.matricula) ");
		sql.append("      WHERE usu.matricula = ? ");
		sql.append("   ORDER BY usu.nome ");

		SQLQuery query = mSession.createSQLQuery(sql.toString());
		query.addEntity(Aluno.class);
		query.setString(0, matricula);

		listaRetorno = (ArrayList<Aluno>) query.list();

		return listaRetorno;
	}
}
